import logging
import sys
from logging.handlers import TimedRotatingFileHandler
from pathlib import Path
from config.config import settings

# 日志格式
LOG_FORMAT = "%(asctime)s - %(levelname)s - %(name)s - %(message)s"

# 日志文件路径
log_file_path = Path(settings.LOG_FILE)
# 确保日志文件所在的目录存在
log_file_path.parent.mkdir(parents=True, exist_ok=True)

def setup_logger(name: str) -> logging.Logger:
    """
    设置并返回一个配置好的 logger 实例。

    :param name: logger 的名称，通常是模块的 __name__。
    :return: 配置好的 logger 实例。
    """
    logger = logging.getLogger(name)
    logger.setLevel(logging.INFO)  # 设置默认日志级别

    # 防止重复添加 handler
    if logger.hasHandlers():
        return logger

    # 控制台输出 handler
    stream_handler = logging.StreamHandler(sys.stdout)
    stream_handler.setFormatter(logging.Formatter(LOG_FORMAT))
    logger.addHandler(stream_handler)

    # 文件输出 handler，带日志轮转
    file_handler = TimedRotatingFileHandler(
        filename=log_file_path,
        when="midnight",  # 每天午夜轮转
        interval=1,
        backupCount=30,  # 保留30天的日志
        encoding="utf-8"
    )
    file_handler.setFormatter(logging.Formatter(LOG_FORMAT))
    logger.addHandler(file_handler)

    return logger

# 创建一个默认的 logger，方便在其他模块中直接导入使用
logger = setup_logger("app")